/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import POJO.Hinhanh;
import UTIL.HibernateUtil;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

/**
 *
 * @author nhlvu07db373
 */
public class HinhanhDAO extends HibernateDaoSupport {

    private Session session;

    /**
     * Lấy danh sách tất cả các hình ảnh
     * @return 
     */
    public List dsHinhanhAll() {
        List list = null;
        session = HibernateUtil.getSessionFactory().openSession();
        try {
            org.hibernate.Transaction ts = session.beginTransaction();
            Criteria crit = session.createCriteria(Hinhanh.class);
            list = crit.list();
            ts.commit();
            session.flush();
        } catch (Exception ex) {
            System.err.println(ex.getMessage().toString());
        } finally {
            session.close();
        }
        return list;
    }

    /**
     * Lấy danh sách tất cả các hình ảnh cho sản phẩm
     * @param maSanPham mã sản phẩm(String)
     * @return 
     */
    public List dsHinhSanPham(String maSanPham) {
        List list = null;
        session = HibernateUtil.getSessionFactory().openSession();
        try {
            org.hibernate.Transaction ts = session.beginTransaction();
            Criteria crit = session.createCriteria(Hinhanh.class).add(Restrictions.like("maSanPham", maSanPham));
            list = crit.list();
            ts.commit();
            session.flush();
        } catch (Exception ex) {
            System.err.println(ex.getMessage().toString());
        } finally {
            session.close();
        }
        return list;
    }

    /**
     * Lấy danh sách hình ảnh có phân trang
     * @param firstResult
     * @param maxResults
     * @return
     * @throws Throwable 
     */
    public List dsHinhanhAll(int firstResult, int maxResults) throws Throwable {
        List list = null;
        session = HibernateUtil.getSessionFactory().openSession();
        try {
            session = HibernateUtil.getSessionFactory().openSession();
            org.hibernate.Transaction ts = session.beginTransaction();
            Criteria crit = session.createCriteria(Hinhanh.class);
            crit.setFirstResult(firstResult);
            crit.setMaxResults(maxResults);
            list = crit.list();
            ts.commit();
            session.flush();

        } catch (Exception ex) {
            System.err.println(ex.getMessage().toString());
        } finally {
            session.close();
        }
        return list;
    }

    /**
     * Lấy thông tin chi tiết của hình ảnh
     * @param maHa mã hình ảnh
     * @return Hình ảnh POJO
     */
    public Hinhanh layHinhanh(String maHa) {
        Hinhanh sp = null;
        session = HibernateUtil.getSessionFactory().openSession();
        try {
            org.hibernate.Transaction ts = session.beginTransaction();
            Criteria crit = session.createCriteria(Hinhanh.class).add(Restrictions.like("maHa", maHa));
            List list = crit.list();
            sp = (Hinhanh) list.get(0);
            ts.commit();
            session.flush();
        } catch (Exception ex) {
            System.err.println(ex.getMessage().toString());
        } finally {
            session.close();
        }
        return sp;
    }

    /**
     *Thêm/cập nhật sản phẩm
     * @param sp  //Sản phẩm cần Thêm/cập nhật
     */
    public boolean luuHinhanh(Hinhanh Ha) {
        boolean kq = false;
        if (Ha.getMaHinhAnh() == null) {
            String maHa = new GetIDDAO().getID("HA", "Hinhanh", "maHinhAnh");
            Ha.setMaHinhAnh(maHa);
        }
        session = HibernateUtil.getSessionFactory().openSession();
        try {
            org.hibernate.Transaction ts = session.beginTransaction();
            session.saveOrUpdate(Ha);
            ts.commit();
            session.flush();
            kq = true;
        } catch (Exception ex) {
            if (session.getTransaction().isActive()) {
                session.getTransaction().rollback();
            }
            System.err.println(ex.getMessage().toString());
        } finally {
            session.close();
        }
        return kq;
    }

    /**
     * Xóa hình ảnh
     * @param ha,maHa tham số là hình ảnh POJO hay là mã hình ảnh(String)
     * @return 
     */
    public boolean xoaHinhanh(Hinhanh ha) {
        session = HibernateUtil.getSessionFactory().openSession();
        boolean kq = false;
        try {
            org.hibernate.Transaction ts = session.beginTransaction();
            session.delete(ha);
            ts.commit();
            session.flush();
            kq = true;
        } catch (Exception ex) {
            if (session.getTransaction().isActive()) {
                session.getTransaction().rollback();
            }
            System.err.println(ex.getMessage().toString());
        } finally {
            session.close();
        }
        return kq;
    }

    public boolean xoaHinhanh(String maHa) {
        Hinhanh ha = layHinhanh(maHa);
        return xoaHinhanh(ha);
    }

    /**
     * lấy hình đại điện
     * @param maSp
     * @return hình đại diện
     */
    public Hinhanh layHinhDaiDien(String maSp) {
        Hinhanh ha = null;
        session = HibernateUtil.getSessionFactory().openSession();
        try {
            org.hibernate.Transaction ts = session.beginTransaction();
            Criteria criteria = session.createCriteria(Hinhanh.class).add(Restrictions.eq("maSanPham", maSp));
            List list = criteria.list();
            ha = (Hinhanh) list.get(0);
            ts.commit();
            session.flush();
        } catch (Exception ex) {
            System.err.println(ex.getMessage().toString());
        } finally {
            session.close();
        }

        return ha;
    }
}
